跳到主要内容

CORS 跨域解决方案(推荐)

跨源资源共享(CORS) 是一个 W3C 标准,全称是“跨源资源共享”(Cross-origin resource sharing),允许 ajax 跨域请求。

实现 CORS 通信的关键是服务器。只要服务器实现了 CORS 接口,就可以跨源通信。

什么情况下需要 CORS?

前文提到的由 XMLHttpRequest 或 Fetch API 发起的跨源 HTTP 请求。

服务器如何实现 CORS?

CORS 请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。

简单请求

服务端返回的标头的 Access-Control-Allow-Origin: * 值表明,该资源可以被任意外源访问。

简单请求需要满足所有下述条件:

请求方法之一:
GET
HEAD
POST

标头集合为:
Accept
Accept-Language
Content-Language
Content-Type(需要注意额外的限制)
Range(只允许简单的范围标头值 如 bytes=256- 或 bytes=127-255

Content-Type 标头所指定的媒体类型的值仅限于下列三者之一:
text/plain
multipart/form-data
application/x-www-form-urlencoded

非简单请求

非简单请求,就自动发出一个“预检”请求。

如果开启 withCredentials 属性,发送 Cookie。

服务器不能将 Access-Control-Allow-Origin 的值设为通配符“*”,而应将其设置为特定的域,如:Access-Control-Allow-Origin: https://example.com。

其他方案(不推荐)

[!NOTE] 除非特殊(ie 都没了),否则建议禁止。减少项目维护成本和复杂度。

JSONP;

参考链接

跨源资源共享(CORS) https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS